#!/usr/bin/env python3
"""
详细解释特征重要性饼图的计算过程
"""

def explain_feature_importance():
    """解释特征重要性饼图的计算过程"""
    
    print("=" * 80)
    print("特征重要性饼图计算过程详解")
    print("=" * 80)
    
    print("\n📊 当前显示的数据:")
    print("   - 历史负荷: 96.4%")
    print("   - 气象因素: 3.6%")
    print("   - 时间特征: 0.1%")
    print("   - 总计: 100%")
    
    print("\n🔍 计算过程详解:")
    
    # 1. 数据来源
    print("\n1. 数据来源:")
    print("   ✅ 后端API: /api/prediction/feature-importance")
    print("   ✅ 服务类: FeatureImportanceService")
    print("   ✅ 模型文件: backend/models/saved_models/")
    print("   ✅ 数据库表: feat_imp")
    
    # 2. 特征分类
    print("\n2. 特征分类:")
    print("   📈 历史负荷特征 (672维):")
    print("      - load_lag_0 到 load_lag_671")
    print("      - 包含过去28天的负荷数据")
    print("      - 每个小时一个特征点")
    print("      - 占总特征数的约95%")
    
    print("   🌤️ 气象特征 (4维):")
    print("      - t_max: 最高温度")
    print("      - t_min: 最低温度")
    print("      - avg_temp: 平均温度")
    print("      - humidity: 湿度")
    print("      - 占总特征数的约0.6%")
    
    print("   ⏰ 时间特征 (9维):")
    print("      - monday, tuesday, ..., sunday")
    print("      - is_holiday: 是否节假日")
    print("      - is_weekend: 是否周末")
    print("      - 占总特征数的约1.3%")
    
    print("   📊 统计特征 (9维):")
    print("      - load_mean, load_std, load_max, load_min")
    print("      - load_median, load_p10, load_p90")
    print("      - load_p25, load_p75")
    print("      - 占总特征数的约1.3%")
    
    print("   📅 日间统计特征 (21维):")
    print("      - daily_mean_0 到 daily_mean_6")
    print("      - daily_max_0 到 daily_max_6")
    print("      - daily_min_0 到 daily_min_6")
    print("      - 占总特征数的约3%")
    
    # 3. 计算步骤
    print("\n3. 计算步骤:")
    print("   🔹 步骤1: 加载模型")
    print("      - 从saved_models目录加载训练好的模型")
    print("      - 支持lightgbm, xgboost, ensemble模型")
    print("      - 获取模型的feature_importances_属性")
    
    print("   🔹 步骤2: 特征重要性提取")
    print("      - 从模型获取每个特征的重要性分数")
    print("      - 对于ensemble模型，从数据库获取历史数据")
    print("      - 计算平均重要性分数")
    
    print("   🔹 步骤3: 特征分类汇总")
    print("      - 将672个历史负荷特征的重要性相加")
    print("      - 将4个气象特征的重要性相加")
    print("      - 将9个时间特征的重要性相加")
    print("      - 计算各类特征的相对重要性")
    
    print("   🔹 步骤4: 百分比计算")
    print("      - 总重要性 = 所有特征重要性之和")
    print("      - 历史负荷% = 历史负荷重要性 / 总重要性 × 100")
    print("      - 气象因素% = 气象特征重要性 / 总重要性 × 100")
    print("      - 时间特征% = 时间特征重要性 / 总重要性 × 100")
    
    # 4. 为什么历史负荷占主导
    print("\n4. 为什么历史负荷占主导地位:")
    print("   ✅ 数据量优势:")
    print("      - 历史负荷: 672个特征")
    print("      - 气象因素: 4个特征")
    print("      - 时间特征: 9个特征")
    print("      - 特征数量比例: 672:4:9")
    
    print("   ✅ 预测逻辑:")
    print("      - 负荷预测主要依赖历史模式")
    print("      - 过去28天的负荷数据包含丰富信息")
    print("      - 负荷具有强自相关性")
    print("      - 历史负荷是最可靠的预测因子")
    
    print("   ✅ 模型训练结果:")
    print("      - 机器学习模型自动学习特征重要性")
    print("      - 历史负荷特征在训练中表现最佳")
    print("      - 模型验证了历史负荷的主导作用")
    
    # 5. 气象因素的作用
    print("\n5. 气象因素的作用:")
    print("   🌡️ 温度影响:")
    print("      - 高温增加空调负荷")
    print("      - 低温增加取暖负荷")
    print("      - 温度是负荷的重要外部因素")
    
    print("   💧 湿度影响:")
    print("      - 高湿度影响人体舒适度")
    print("      - 间接影响空调使用强度")
    print("      - 与温度协同作用")
    
    print("   📊 相对重要性:")
    print("      - 气象因素占3.6%，虽然比例小但很重要")
    print("      - 在负荷预测中提供外部环境信息")
    print("      - 帮助模型捕捉季节性变化")
    
    # 6. 时间特征的作用
    print("\n6. 时间特征的作用:")
    print("   📅 周期性模式:")
    print("      - 工作日vs周末的负荷差异")
    print("      - 节假日的特殊负荷模式")
    print("      - 季节性负荷变化")
    
    print("   ⏰ 时间重要性:")
    print("      - 占0.1%，比例最小但不可或缺")
    print("      - 捕捉负荷的时间周期性")
    print("      - 提供重要的时间上下文信息")
    
    # 7. 数据更新机制
    print("\n7. 数据更新机制:")
    print("   🔄 实时更新:")
    print("      - 每次模型训练后更新特征重要性")
    print("      - 保存到数据库feat_imp表")
    print("      - 前端实时获取最新数据")
    
    print("   📈 动态计算:")
    print("      - 基于实际训练数据计算")
    print("      - 反映模型真实的学习结果")
    print("      - 随模型性能变化而调整")
    
    print("\n✅ 总结:")
    print("   特征重要性饼图基于机器学习模型的实际训练结果计算，")
    print("   反映了不同特征在负荷预测中的真实贡献度。")
    print("   历史负荷占主导地位是符合电力负荷预测规律的，")
    print("   而气象和时间因素虽然比例较小，但提供了重要的外部信息。")
    
    print("\n🎯 实际应用价值:")
    print("   - 帮助理解负荷预测的关键因素")
    print("   - 指导特征工程和数据收集策略")
    print("   - 验证模型学习的合理性")
    print("   - 为负荷预测提供可解释性")

if __name__ == "__main__":
    explain_feature_importance() 